Software is installed in logical layers, such as operating system layer and application layers that must be precisely configured in order to provide end users with specific functions. Collectively, the layers and configuration settings of the software is typically referred to as a software stack or simply stack. Each layer in the stack can impact the functioning of the other layers. As a result, any inconsistency in the stack can result in a computer system becoming unstable and causing production outages.
In order to avoid undesirable behavior of a computer system and to reduce the operational risks, it is important that the software stack is built accurately. However, in practice it is challenging to build a stack that is consistent with what was intended. Latent defects in the stack may not become known until after there is a serious disruption of service with the computer systems in production. Such production system outages can be successfully avoided if the stack defects are identified and dealt with in timely manner.
Typically, in a corporate enterprise, each stack layer is installed, configured and/or supported by disparate teams with relevant skills. Often, defects are introduced as result of inaccurate installation processes, human errors, handover from one team to another, etc. The difficulty in building a defect-free stack is compounded further by quality of the installation packages and fixes. Often, installation packages report successful installation of software or software fixes when, in fact, certain aspects of an installation failed, introducing defects in the stack.
To successfully verify a built stack against the intended at a granular level, it is imperative that there is a robust and efficient mechanism to test the stack down to finer details such as versions of binaries, registry entries, and other configuration settings of the software stack installed and configured on individual servers of a server estate.